home *** CD-ROM | disk | FTP | other *** search
/ EuroCD 3 / EuroCD 3.iso / Programming / Python-1.4 / Lib / token.py < prev    next >
Text File  |  1998-06-24  |  3KB  |  132 lines

  1. #! /usr/bin/env python
  2. #
  3. #  Tokens (from "token.h")
  4. #
  5. #  This file is automatically generated; please don't muck it up!
  6. #
  7. #  To update the symbols in this file, 'cd' to the top directory of
  8. #  the python source tree after building the interpreter and run:
  9. #
  10. #    PYTHONPATH=./Lib ./python Lib/token.py
  11. #
  12. #  (this path allows the import of string.py and regexmodule.so
  13. #  for a site with no installation in place)
  14.  
  15. #--start constants--
  16. ENDMARKER = 0
  17. NAME = 1
  18. NUMBER = 2
  19. STRING = 3
  20. NEWLINE = 4
  21. INDENT = 5
  22. DEDENT = 6
  23. LPAR = 7
  24. RPAR = 8
  25. LSQB = 9
  26. RSQB = 10
  27. COLON = 11
  28. COMMA = 12
  29. SEMI = 13
  30. PLUS = 14
  31. MINUS = 15
  32. STAR = 16
  33. SLASH = 17
  34. VBAR = 18
  35. AMPER = 19
  36. LESS = 20
  37. GREATER = 21
  38. EQUAL = 22
  39. DOT = 23
  40. PERCENT = 24
  41. BACKQUOTE = 25
  42. LBRACE = 26
  43. RBRACE = 27
  44. EQEQUAL = 28
  45. NOTEQUAL = 29
  46. LESSEQUAL = 30
  47. GREATEREQUAL = 31
  48. TILDE = 32
  49. CIRCUMFLEX = 33
  50. LEFTSHIFT = 34
  51. RIGHTSHIFT = 35
  52. DOUBLESTAR = 36
  53. OP = 37
  54. ERRORTOKEN = 38
  55. N_TOKENS = 39
  56. NT_OFFSET = 256
  57. #--end constants--
  58.  
  59. names = dir()
  60. tok_name = {}
  61. for name in names:
  62.     number = eval(name)
  63.     if type(number) is type(0):
  64.     tok_name[number] = name
  65.  
  66. def ISTERMINAL(x):
  67.     return x < NT_OFFSET
  68.  
  69. def ISNONTERMINAL(x):
  70.     return x >= NT_OFFSET
  71.  
  72. def ISEOF(x):
  73.     return x == ENDMARKER
  74.  
  75.  
  76. def main():
  77.     import regex
  78.     import string
  79.     import sys
  80.     args = sys.argv[1:]
  81.     inFileName = args and args[0] or "Include/token.h"
  82.     outFileName = "Lib/token.py"
  83.     if len(args) > 1:
  84.     outFileName = args[1]
  85.     try:
  86.     fp = open(inFileName)
  87.     except IOError, err:
  88.     sys.stdout.write("I/O error: %s\n" % str(err))
  89.     sys.exit(1)
  90.     lines = string.splitfields(fp.read(), "\n")
  91.     fp.close()
  92.     re = regex.compile(
  93.     "#define[ \t][ \t]*\([A-Z][A-Z_]*\)[ \t][ \t]*\([0-9][0-9]*\)",
  94.     regex.casefold)
  95.     tokens = {}
  96.     for line in lines:
  97.     if re.match(line) > -1:
  98.         name, val = re.group(1, 2)
  99.         val = string.atoi(val)
  100.         tokens[val] = name        # reverse so we can sort them...
  101.     keys = tokens.keys()
  102.     keys.sort()
  103.     # load the output skeleton from the target:
  104.     try:
  105.     fp = open(outFileName)
  106.     except IOError, err:
  107.     sys.stderr.write("I/O error: %s\n" % str(err))
  108.     sys.exit(2)
  109.     format = string.splitfields(fp.read(), "\n")
  110.     fp.close()
  111.     try:
  112.     start = format.index("#--start constants--") + 1
  113.     end = format.index("#--end constants--")
  114.     except ValueError:
  115.     sys.stderr.write("target does not contain format markers")
  116.     sys.exit(3)
  117.     lines = []
  118.     for val in keys:
  119.     lines.append("%s = %d" % (tokens[val], val))
  120.     format[start:end] = lines
  121.     try:
  122.     fp = open(outFileName, 'w')
  123.     except IOError, err:
  124.     sys.stderr.write("I/O error: %s\n" % str(err))
  125.     sys.exit(4)
  126.     fp.write(string.joinfields(format, "\n"))
  127.     fp.close()
  128.  
  129.  
  130. if __name__ == "__main__":
  131.     main()
  132.